import env from './env'
import axios from 'axios'
import { useAuthStore } from '../stores/auth'; // 引入 Pinia 的 auth store
import { ElMessage } from 'element-plus'; // 假设用 element-plus 的提示，可根据实际 UI 库调整
import router  from '../router'; // 引入路由实例，用于登录失效时跳转


// 判断当前环境
const isProduction = import.meta.env.PROD

// 通过环境变量决定使用哪种生产环境配置（开发环境还是生产环境（绝对路径（直接访问后端）、相对路径（通过 Nginx 代理）））
// 可以在打包时通过命令行设置 VITE_PROD_MODE 变量
const prodMode = import.meta.env.VITE_PROD_MODE || 'absolute'

// 获取对应的基础地址
const baseUrl = isProduction 
  ? (prodMode === 'relative' ? env.productionRelative.baseUrl : env.production.baseUrl)
  : env.development.baseUrl

// 创建 axios 实例
const request = axios.create({
  baseURL: baseUrl,
  timeout: 5000
})

// 请求拦截器
request.interceptors.request.use(
  (config) => {
    const authStore = useAuthStore();
    // 如果有 token，添加到请求头
    if (authStore.token) {
      config.headers.Authorization = `Bearer ${authStore.token}`;
    }
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

// 响应拦截器
request.interceptors.response.use(
  (response) => {
    // 直接返回响应数据，也可根据后端约定做一层简单解析
    return response;
  },
  (error) => {
    // 统一错误处理
    const status = error.response?.status;
    const message = error.response?.data?.error || '网络异常';
    if (status === 401) {
      // 身份验证失败，清空用户信息并跳转到登录页
      const authStore = useAuthStore();
      authStore.logout(); 
      router.push('/login');
    //   ElMessage.error('登录状态失效，请重新登录');
    } else if (status === 403) {
      ElMessage.error('没有权限执行该操作');
    } else {
      ElMessage.error(message);
    }
    return Promise.reject(error);
  }
);

export default request;